package DataStructureAndAlgorithm.BaseAlgorithm.Mathematics.求组合数;

import java.util.Scanner;
//求组合数需要N^2的复杂度，因此，求组合数的数据范围不能超过10^4
public class AcWing_886 {
    public static void main(String[] args){
        Scanner in = new Scanner(System.in);
        int[][] nums = getNums();
        int n = in.nextInt();
        for (int i = 0; i < n; i++){
            int a = in.nextInt();
            int b = in.nextInt();
            System.out.println(nums[a][b]);
        }
    }
    static int[][] getNums(){
        int N = 2010;
        int mod = 1000000007;
        int[][] res = new int[N][N];
        //从i个数中挑j个数的组合方式
        for (int i = 0; i < N; i++){
            //从前i个中选，因此，不能选超过i个数
            for (int j = 0; j <= i; j++){
                //i个数，挑0个的方案数默认为1
                if (j == 0)res[i][j] = 1;
                else res[i][j] = (res[i - 1][j] + res[i - 1][j - 1]) % mod;
                //从i个数中挑j个数的组合方式
                //等价于：不选第i个数和选第i个数
                //选第i个数，则只需再选j-1个数，即res[i - 1][j - 1]
                //不选第i个数，则还需选j个数，即res[i - 1][j]
                //类似于01背包的计数问题
            }
        }
        return res;
    }
}

/*
给定 n 组询问，每组询问给定两个整数 a，b，请你输出 Cbamod(109+7)

的值。
输入格式

第一行包含整数 n

。

接下来 n
行，每行包含一组 a 和 b

。
输出格式

共 n

行，每行输出一个询问的解。
数据范围

1≤n≤10000
,
1≤b≤a≤105

输入样例：

3
3 1
5 3
2 2

输出样例：

3
10
1

 */